#include "widget.h"
#include "ui_widget.h"

#include <QRegExp>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1.正则表达式的基本用法
    // 验证字符串中是否有 or
//    QRegExp r1("or");
//    qDebug() << r1.indexIn("hello world");  // 7
//    qDebug() << r1.indexIn("true or false"); // 5
//    qDebug() << r1.indexIn("abcdef"); // -1
//    qDebug() << r1.indexIn("roror"); // 1
//    qDebug() << r1.indexIn("o1r"); // -1

    // 2.边界符
    // 以 lol 开头
//    QRegExp r2("^lol");
//    qDebug() << r2.indexIn("lol-win");  // 0
//    qDebug() << r2.indexIn("ch-lol");  // -1
//    qDebug() << r2.indexIn("1o1l");  // -1

    // 以 lol 结尾
//    QRegExp r3("lol$");
//    qDebug() << r3.indexIn("lol-win");  // -1
//    qDebug() << r3.indexIn("ch-lol");  //3
//    qDebug() << r3.indexIn("1o1l");  // -1

    // 以abc开头 并且 以abc结尾。 这种形式只能是字符串本身
//    QRegExp r4("^abc$");
//    qDebug() << r4.indexIn("abc"); // 0
//    qDebug() << r4.indexIn("adbc"); // -1
//    qDebug() << r4.indexIn("dabc"); // -1
//    qDebug() << r4.indexIn("abcabc"); // -1



    connect(ui->pushButton, &QPushButton::clicked, [this](){
        QString email = ui->lineEdit->text();
//        QRegExp r1("@126.com$");
//        QRegExp r2("@qq.com$");
//        if(r1.indexIn(email) == -1 && r2.indexIn(email) == -1)
//        {
//            qDebug() << "格式不正确，必须使用126邮箱或者QQ邮箱";
//            return ;
//        }
//        qDebug() << "格式正确";

        // 合并两个正则表达式
        QRegExp r("@(126|qq).com$");
        if(r.indexIn(email) == -1)
        {
            qDebug() << "格式不正确，必须使用126邮箱或者QQ邮箱";
            return ;
        }
        qDebug() << "格式正确";
    });


    // 3.字符类
    // 只要字符串有一个 abc 其中任意一个字符串即可
    // [] 只代表一个字符
//    QRegExp r6("[abc]");
//    qDebug() << r6.indexIn("abc");  // 0
//    qDebug() << r6.indexIn("ez");  // -1
//    qDebug() << r6.indexIn("raze");  // 1
//    qDebug() << r6.indexIn("hello"); // -1
//    qDebug() << r6.indexIn("zf4ca");  // 3

//    QRegExp r7("^[abc]");
//    qDebug() << r7.indexIn("abc");  // 0
//    qDebug() << r7.indexIn("raze");  // -1
//    qDebug() << r7.indexIn("zf4ca");  // -1

//    QRegExp r8("^[abc]$");
//    qDebug() << r8.indexIn("abc");  // -1
//    qDebug() << r8.indexIn("raze");  // -1
//    qDebug() << r8.indexIn("zf4ca");  // -1
//    qDebug() << r8.indexIn("a");  // 0
//    qDebug() << r8.indexIn("b");  // 0
//    qDebug() << r8.indexIn("c");  // 0

//    QRegExp r9("^[a-z]$");
//    qDebug() << r9.indexIn("a");  // 0
//    qDebug() << r9.indexIn("u");  // 0
//    qDebug() << r9.indexIn("v");  // 0
//    qDebug() << r9.indexIn("A");  // -1

//    QRegExp r10("^[a-zA-Z0-9_]$");
//    qDebug() << r10.indexIn("a");  // 0
//    qDebug() << r10.indexIn("7");  // 0
//    qDebug() << r10.indexIn("_");  // 0
//    qDebug() << r10.indexIn("A");  // 0

    // 4.量词
    // 只要字符串中有三个连续的字母组合即可
//    QRegExp r11("[a-z]{3}");

//    qDebug() << r11.indexIn("admin");  // 0
//    qDebug() << r11.indexIn("#$%$ab00");  // -1
//    qDebug() << r11.indexIn("$##@oiu123");  // 4

    // 字符串长度是5位，只能出现 a-z0-9 之间的字符
//    QRegExp r12("^[a-z0-9]{5}$");

//    qDebug() << r12.indexIn("admin");  // 0
//    qDebug() << r12.indexIn("ez123");  // 0
//    qDebug() << r12.indexIn("admin123");  // -1

    connect(ui->postcodeBtn, &QPushButton::clicked, [this](){
        QRegExp postReg("^[1-9][0-9]{5}$");  // 6位数字，第一位不能为0
        QString postCode = ui->postcodeLine->text();
        if(postReg.indexIn(postCode) == -1)
        {
            qDebug() << "邮编格式错误";
            return ;
        }
        qDebug() << "格式正确";
    });

//    QRegExp r13("^[A-Z0-9]{3,}$");
//    qDebug() << r13.indexIn("Admin");  // -1
//    qDebug() << r13.indexIn("UPLOAD"); // 0
//    qDebug() << r13.indexIn("VN");  // -1
//    qDebug() << r13.indexIn("ADS123ASDASODIJHN");  // 0

//    QRegExp r14("^[a-z0-9]{3,10}$");
//    qDebug() << r14.indexIn("admin");  // 0
//    qDebug() << r14.indexIn("admin20040109");  // -1
//    qDebug() << r14.indexIn("ad");  // -1

    // 5.替换
//     QString str = "helloo world";
//     qDebug() << str.replace("o", "zzz");
//     QRegExp r15("o{2}");
//     qDebug() << str.replace(r15, "zzz");

    QString str = "你个LJ， 大垃圾， laji玩意儿 Laji";
    QRegExp r16("(lj|laji)", Qt::CaseInsensitive);  // 忽略大小写
    qDebug() << str.replace(r16, "**");

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_userBtn_clicked()
{
    QRegExp userReg("^[a-zA-Z0-9_]{6,12}$");
    QString userName = ui->userLine->text();
    if(userReg.indexIn(userName) == -1)
    {
        qDebug() << "用户名格式错误";
        return ;
    }
    qDebug() << "格式正确";
}


// 手机号规则
// 3[0-9]
// 4[45789]
// 5[0-35-9]
// 6[67]
// 7[1-35-8]
// 8[0-9]
// 9[0-35-9]
void Widget::on_telBtn_clicked()
{
    QRegExp telReg("^1([38][0-9]|4[45789]|[59][0-35-9]|6[67]|7[1-35-8])[0-9]{8}$");
    QString tel = ui->telLine->text();
    if(telReg.indexIn(tel) == -1)
    {
        qDebug() << "手机号格式不正确";
        return ;
    }
    qDebug() << "格式正确";
}
